// JavaScript Document
/*====================================== 
   author:faxsun
   Copyright © 2015 faxsun. All rights reserved. 
   针对资讯网页常用的普通插件集
   如需修改请注意与页面标记类名相对应
======================================*/

$(function() {

    //截取字符串
    $.fn.limit = function(num) {
        var objString = $(this).text();
        var objLength = $(this).text().length;
        //var num = $(this).attr("limit");
        if (objLength > num) {
            $(this).attr("value", $.trim(objString));
            // alert(objLength)
            objString = $(this).text(objString.substring(0, num) + "...");
        }
    };
    //----------
    $.each($('*[fx=limit]'), function(i) {
        $('*[fx=limit]').eq(i).limit($('*[fx=limit]').eq(i).attr('num'));
    });

    // 动态添加 查看更多 --基于省略段落
    $.fn.append_more = function(url) {
        var $url = url || "#";
        var $a = $("<a href='" + $url + "' class='append-more' target='_blank'>[详细]</a>");
        if ($(this).has('*[fx=limit]')) {
            $(this).find('*[fx=limit]').append($a);
        }
    }
    $.each($('*[fx=append_more]'), function(i) {
        $(this).append_more($(this).attr('url'));
    });


    //Tab菜单切换
    $.fn.tab = function(MenuTags, MenuOnClass, Nav, NavTags, Event) {
        var YjMenu = $(this);
        var ms = YjMenu.find(MenuTags).length;
        var ns = $(Nav).find(NavTags).length;
        if (ms != ns) {
            YjMenu.html('错误信息：主菜单与二级菜单数不同,如果二级菜单有为空的请保留空标签！').css({
                color: '#f00',
                background: '#FF9',
                fontSize: '12px',
                padding: '5px'
            });
            $('.' + Nav + '').css({
                display: 'none'
            });
            return;
        }
        YjMenu.find(MenuTags).css({
            cursor: 'pointer'
        });
        $(Nav).find(NavTags).css({
            display: 'none'
        });
        //alert('.'+Nav+' '+NavTags+'');
        for (var s = 0; s < ms; s++) {
            YjMenu.find(MenuTags).eq(s).attr('s', s);
        }
        $(Nav).find(NavTags).eq(0).css({
            display: 'block'
        });
        YjMenu.find(MenuTags).eq(0).addClass(MenuOnClass);
        if (Event == 'click') {
            //click
            YjMenu.find(MenuTags).click(function() {
                var RjMenu = $(this);
                var sy = RjMenu.attr('s');
                for (var i = 0; i < ms; i++) {
                    if (i == sy) {
                        YjMenu.find(MenuTags).eq(i).addClass(MenuOnClass);
                        $(Nav).find(NavTags).eq(i).css({
                            display: 'block'
                        });
                    } else {
                        YjMenu.find(MenuTags).eq(i).removeClass(MenuOnClass);
                        $(Nav).find(NavTags).eq(i).css({
                            display: 'none'
                        });
                    }
                }
            });
        }
        if (Event == 'hover' || Event == '') {
            //over
            YjMenu.find(MenuTags).mouseover(function() {
                var RjMenu = $(this);
                var sy = RjMenu.attr('s');
                for (var i = 0; i < ms; i++) {
                    if (i == sy) {
                        YjMenu.find(MenuTags).eq(i).addClass(MenuOnClass);
                        $(Nav).find(NavTags).eq(i).css({
                            display: 'block'
                        });
                    } else {
                        YjMenu.find(MenuTags).eq(i).removeClass(MenuOnClass);
                        $(Nav).find(NavTags).eq(i).css({
                            display: 'none'
                        });
                    }
                }
            })
        }
    };
    $.each($('*[fx=tab]'), function(i) {
        $('*[fx=tab]').eq(i).tab('*[tab]', 'focus', $('*[fx=tab]').eq(i).find('*[switchblock]'), '*[block]', $('*[fx=tab]').eq(i).attr('event'));
    });


    //焦点图
    $.fn.fs = function(o) {
        var defaults = {
            easeing: "easeInOutExpo",
            time: 7000,
            delay: 1000,
            bg: 'transparent',
            btnH: '30px',
            btnBgbottom: '32px',
            btnbottom: '32px',
            textAlign: 'center',
            msg: ".img-intro"
        };
        var opts = $.extend(defaults, o);
        var $r = $(this);
        //css
        $r.css({
            width: $r.width(),
            height: $r.height(),
            overflow: 'hidden',
            position: 'relative'
        });
        $r.find('ul').css({
            position: 'absolute',
            height: $r.height()
        });
        $r.find('ul li').css({
            float: 'left',
            width: $r.width(),
            height: $r.height(),
            overflow: 'hidden',
            position: 'relative'
        });
        $r.find('ul li div').css({
            position: 'absolute',
            overflow: 'hidden'
        });
        //css

        var sWidth = $r.width(); //获取焦点图的宽度（显示面积）
        var len = $r.find('ul li').length; //获取焦点图个数
        var index = 0;
        var picTimer;

        //以下代码添加数字按钮和按钮后的半透明长条
        var btn = "<div class='btnBg'></div><div class='btn'>";
        for (var i = 0; i < len; i++) {
            btn += "<span>" + (i + 1) + "</span>";
        };
        btn += "</div>";
        $r.append(btn);
        $r.find(".btnBg").css("opacity", 0.5);
        $r.find('.btnBg').css({
            position: 'absolute',
            width: $r.width(),
            left: '0px',
            bottom: '0px',
            height: opts.btnH,
            background: opts.bg,
            bottom: opts.btnBgbottom
        });
        $r.find('.btn').css({
            position: 'absolute',
            width: $r.width(),
            bottom: opts.btnbottom,
            textAlign: opts.textAlign,
            left: '0px'
        });
        $r.find('.btn span').css({
            display: 'inline-block',
            _display: 'inline',
            _zoom: '1',
            cursor: 'pointer'
        });
        //为数字按钮添加鼠标滑入事件，以显示相应的内容
        $r.find(".btn span").mouseenter(function() {
            index = $r.find(".btn span").index(this);
            // console.log(index);
            showPics(index);
        }).eq(0).trigger("mouseenter");

        //本例为左右滚动，即所有li元素都是在同一排向左浮动，所以这里需要计算出外围ul元素的宽度
        $r.find("ul").css("width", sWidth * (len + 1));

        //鼠标滑入某li中的某div里，调整其同辈div元素的透明度，由于li的背景为黑色，所以会有变暗的效果
        $r.find("ul li div").hover(function() {
            $(this).siblings().css("opacity", 0.7);
        }, function() {
            $r.find("ul li div").css("opacity", 1);
        });

        //鼠标滑上焦点图时停止自动播放，滑出时开始自动播放
        $r.hover(function() {
            clearInterval(picTimer);
        }, function() {
            picTimer = setInterval(function() {
                if (index == len) { //如果索引值等于li元素个数，说明最后一张图播放完毕，接下来要显示第一张图，即调用showFirPic()，然后将索引值清零
                    showFirPic();
                    index = 0;
                } else { //如果索引值不等于li元素个数，按普通状态切换，调用showPics()
                    showPics(index);
                }
                index++;
            }, opts.time); //此3000代表自动播放的间隔，单位：毫秒
        }).trigger("mouseleave");

        //显示图片函数，根据接收的index值显示相应的内容
        function showPics(index) { //普通切换
            var nowLeft = -index * sWidth; //根据index值计算ul元素的left值
            $r.find("ul").stop(true, false).animate({
                "left": nowLeft
            }, opts.delay,opts.easeing, function(){
                $(opts.msg).removeClass("active").eq(index).addClass("active");
            }); //通过animate()调整ul元素滚动到计算出的position
            $r.find(".btn span").removeClass("on").eq(index).addClass("on"); //为当前的按钮切换到选中的效果
        };

        function showFirPic() { //最后一张图自动切换到第一张图时专用
            $r.find("ul").append($r.find("ul li:first").clone());
            var nowLeft = -len * sWidth; //通过li元素个数计算ul元素的left值，也就是最后一个li元素的右边
            $r.find("ul").stop(true, false).animate({
                "left": nowLeft
            }, opts.delay,opts.easeing, function() {
                //通过callback，在动画结束后把ul元素重新定位到起点，然后删除最后一个复制过去的元素
                $r.find("ul").css("left", "0");
                $r.find("ul li:last").remove();
                $(opts.msg).removeClass("active").eq(0).addClass("active");
            });
            $r.find(".btn span").removeClass("on").eq(0).addClass("on"); //为第一个按钮添加选中的效果
        }
    };
    //----------
    $.each($('*[fx=fs]'), function(i) {
        var ti = $('*[fx=fs]').eq(i);
        ti.eq(i).fs();
    });

    //滚轮向下滚动时 图片等元素动态加载
    $.fn.scrollLoading = function(options) {
        var defaults = {
            attr: "data-url"
        };
        var params = $.extend({}, defaults, options || {});
        params.cache = [];
        $(this).each(function() {
            var node = this.nodeName.toLowerCase(),
                url = $(this).attr(params["attr"]);
            if (!url) {
                return;
            }
            //重组
            var data = {
                obj: $(this),
                tag: node,
                url: url
            };
            params.cache.push(data);
        });

        //动态显示数据
        var loading = function() {
            var st = $(window).scrollTop(),//窗口滚动距离
                sth = st + $(window).height();//窗口底部离文档顶部距离
            $.each(params.cache, function(i, data) {
                var o = data.obj,
                    tag = data.tag,
                    url = data.url;
                if (o) {
                    post = o.offset().top;//图片顶部离文档顶部距离
                    posb = post + o.height();//图片底部离文档顶部距离
                    if (post < sth) {
                        //在浏览器窗口内
                        if (tag === "img") {
                            //图片，改变src
                            o.attr("src", url);
                        } else {
                            o.load(url);
                        }
                        data.obj = null;
                    }
                }
            });
            return false;
        };

        //事件触发
        //加载完毕即执行
        loading();
        //滚动执行
        $(window).bind("scroll", loading);
    };
    //----------
    $('img').scrollLoading();
    $.each($('*[fx=scrollLoading]'), function(i) {
        $('*[fx=scrollLoading]').eq(i).scrollLoading();
    });

    //带大图 图片轮播切换器
    $.fn.rollLeft = function(o) {
        var defaults = {
            RollRow: 1,
            DisplayRow: 4,
            Time: 7000,
            Left: null,
            Right: null,
            SwitchBigImg: false,
            Title: false,
            delay: "fast"
        };
        var opts = $.extend(defaults, o);
        var $r = $(this);
        var $s = $r.find('li').length; //得到有多少个
        var $w = $r.find('li').outerWidth(true); //得到单个的宽度
        var $led = $r.find('ul'); //得到内容展示区域
        var $roll_width = opts.RollRow * $w; //计算显示区域的宽度
        var $page = 1; //初始默认是第一屏       
        var $page_count = parseInt($s / opts.RollRow); //计算滚几次
        var $y = $s % opts.RollRow; //...
        var aPay; //设置自动播放
        var flag = true; //标记
        //css
        $r.css({
            overflow: 'hidden',
            position: 'relative'
        });
        $led.css({
            display: 'block',
            position: 'relative',
            width: $s*$w+'px'
        }); //$s*$w
        $r.find('li').css({
            cursor: 'pointer'
        });
        $r.parents('*[fx=rollLeft]').find(opts.Title).html($r.find('li:eq(0)').attr('title'));

        var dir = "left"
        var data1 = {}, data2 = {};
        data1[dir] = -$roll_width;
        data2[dir] = 0;
        function moveNext(){
            $led.css( dir,-$roll_width+'px').children().last().prependTo( $led );
            $led.animate(data2,  opts.delay);
        };

        function movePrev(){
            $led.animate( data1,  opts.delay, function(){
                $led.css( dir, 0 ).children().first().appendTo( $led );
            });
        };
        //向左滚动  
        $r.parents('*[fx=rollLeft]').find(opts.Right).bind('click', function() {
            moveNext();
            $page = 1;
            stBig($page-1); //切换大图/标题
        });
        //向右滚动
        $r.parents('*[fx=rollLeft]').find(opts.Left).bind('click', function() {
            movePrev();
            $page = 4;
            stBig($page); //切换大图/标题
        });
        //自动滚动
        function rPay() {
            moveNext();
            $page = 1;
            stBig($page-1); //切换大图/标题 
        };
        //切换大图
        if (opts.SwitchBigImg != false || opts.Title != false) {
            var $ms = 0;
            //点击切换大图        
            $r.find('li').bind('click', function() {
                if (!flag) {
                    window.videoTemp = $(".video-viewport").children().clone(true);
                    $(".video-viewport").removeClass("vd").empty();
                    aPay = setInterval(rPay, opts.Time);
                    flag = true;
                };
                var index = $(this).index();
                $r.find("li").removeClass("focus");
                $(this).addClass("focus");
                $r.parents('*[fx=rollLeft]').find(opts.SwitchBigImg).hide().attr('src', $(this).find('img').attr('bigSrc')).fadeIn("slow");
                $r.parents('*[fx=rollLeft]').find(opts.Title).html($(this).attr('title'));
                // rPay();
            });
            
            function show(s) {
                $r.find("li").removeClass("focus").eq(s).addClass("focus");
                var src = $r.find('li:eq(' + (s) + ')').find('img').attr('bigSrc');
                if (src == 'undefined') {
                    alert('请为缩略图列表图片指定bigSrc属性，值为大图地址');
                } else {
                    $r.parents('*[fx=rollLeft]').find(opts.SwitchBigImg).hide().attr('src', $r.find('li:eq(' + s + ')').find('img').attr('bigSrc')).fadeIn();
                    $r.parents('*[fx=rollLeft]').find(opts.SwitchBigImg).parent('a').attr('href', $r.find('li:eq(' + s + ')').attr('href'));
                    $r.parents('*[fx=rollLeft]').find(opts.Title).html($r.find('li:eq(' + (s - 1) + ')').attr('title'));
                }
            }
            show($ms);
        }

        function stBig(s) {
            $r.find("li").removeClass("focus").eq(s).addClass("focus");
            if (opts.SwitchBigImg != false || opts.Title != false) {
                var src = $r.find('li:eq(' + (s) + ')').find('img').attr('bigSrc');
                if (src == 'undefined') {
                    alert('请为缩略图列表图片指定bigSrc属性，值为大图地址');
                } else {
                    $r.parents('*[fx=rollLeft]').find(opts.SwitchBigImg).hide().attr('src', src).fadeIn(500);
                    $r.parents('*[fx=rollLeft]').find(opts.SwitchBigImg).parent('a').attr('href', $r.find('li:eq(' + (s - 1) + ')').attr('href'));
                    $r.parents('*[fx=rollLeft]').find(opts.Title).html($r.find('li:eq(' + (s - 1) + ')').attr('title'));
                }
            }
        }
        //如果自动滚动为开启则执行以下代码
        if (opts.Time > 0) {
            aPay = setInterval(rPay, opts.Time);
            var setFlag = function() {
                if(!flag){
                    aPay = setInterval(rPay, opts.Time);
                    flag = true;
                }
            };
            // 视频显示时停止计时，否则自动计时
            if($(".video-viewport").hasClass("vd")){
                clearInterval(aPay);
                flag = false;
            }else{
                var $rb = $r.parents("*[fx=rollLeft]").find(".play-source");
                $rb.hover(function(){
                    clearInterval(aPay);
                    flag = false;
                }, function() {
                    setFlag();
                });
                $r.hover(function(){
                    clearInterval(aPay);
                    flag = false;
                }, function() {
                    setFlag();
                });
            }
            // 点击视频按扭时停止计时
            $("#video").on("click",function(){
                if($(".video-viewport").hasClass("vd")){
                    clearInterval(aPay);
                    flag = false;
                }else{
                    setFlag();
                }
            });
        }
    };
    //----------
    $.each($('*[fx=rollLeft]'), function(i) {
        var ti = $('*[fx=rollLeft]').eq(i);
        ti.find('*[roll]').rollLeft({
            RollRow: ti.attr('RollRow'),
            DisplayRow: ti.attr('DisplayRow'),
            Left: '*[btnl]',
            Right: '*[btnr]',
            Time: ti.attr('Time'),
            SwitchBigImg: ti.attr('SwitchBigImg'),
            Title: ti.attr('Title')
        });
    });
    //附加一个视频点击
    $("body").on("click","#video",function(){
        var $vd = $(".video-viewport");
        if($vd.html() == ""){
            $vd.append(window.videoTemp).addClass("vd");
        }else{
            $vd.toggleClass("vd");
        }
    });

    // 查找高亮关键字
    $.fn.searchKey = function(k) {
        var reg = RegExp(k, 'g');
        $(this).filter(":contains('" + k + "')").each(function() {
            $(this).html($(this).html().replace(reg, '<font color=#e51616>' + k + '</font>'));
        });
    }
    $.each($('*[fx=search-key]'), function(i) {
        $('*[fx=search-key]').eq(i).find('*[keyword-area]').searchKey($('*[fx=search-key]').eq(i).find('*[keyword]').text());
    });

    // 回到顶部
    $.fn.goTop = function(){
        $this = $(this);
        $(window).scroll(function(){
            if($(window).scrollTop() > 100){
                $this.fadeIn("slow");
            }else{
                $this.fadeOut("slow");
            }
        });
        $this.on("click",function(){
            $("html,body").animate({
                scrollTop: "0px"
            },500);
        })
    };
    $("#goTop").goTop();

    // 跟随滑动元素
    $.fn.moveFollow = function(){
        return $.each(this,function(index,elem){
            if(elem){
                var _this = $(elem);
                var offset = _this.offset().top;
                $(window).on("scroll",function(){
                    $(_this).stop().animate({
                        "top": $(window).scrollTop()+offset+"px"
                    },700,"easeOutBack");
                });
                _this.find(".toggle-handle").on("click",function(){
                    _this.toggleClass("show");
                    if($(this).find('i').hasClass("fa-chevron-right")){
                        $(this).find('i').removeClass("fa-chevron-right").addClass("fa-chevron-left");
                    }else{
                        $(this).find('i').removeClass("fa-chevron-left").addClass("fa-chevron-right");
                    }
                })
            }
        });
    };
    $("#QRcode").moveFollow();


    //----------------------------------------------------------------------//
    //页面设置

    
    //屏蔽鼠标右键
    if ($('meta[name=rightMouseButton]').attr('content') == 'true') {
        $(document).bind("contextmenu", function(e) {
            return false;
        })
    }
    //复制版权信息
    if ($('meta[name=Copyright]').attr('content') == 'true') {
        document.body.oncopy = function() {
            setTimeout(function() {
                var text = clipboardData.getData("text");
                if (text) {
                    text = text + $('title').html();
                    clipboardData.setData("text", text);
                }
            }, 100)
        }
    };
    //双击页面滚屏
    if ($('meta[name=DClickScrolling]').attr('content') == 'true') {
        var currentpos, timer;

        function scrollwindow() {
            currentpos = $(document).scrollTop();
            window.scroll(0, ++currentpos);
            if (currentpos != $(document).scrollTop()) {
                clearInterval(timer);
            }
        }
        $(document).mousedown(function() {
            clearInterval(timer);
        });
        $(document).dblclick(function() {
            timer = setInterval(scrollwindow, 30);
        });
    };
    //网站变灰
    if ($('meta[name=GrayPage]').attr('content') == 'true') {
        $('html').css({
            filter: 'progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)'
        });
    };
    //----------------------------------------------
});